//获取包名
package com.codeyang.controller.system;/**
 * 描述: TO-删除标志-DO
 *
 * @author CodeYang_Site
 * @version 2021/5/6 20:24
 */
//设置一个实体变量获取我们输入的类名
//小驼峰变量

import com.codeyang.domain.User;
import com.codeyang.dto.UserDto;
import com.codeyang.service.UserService;
import com.codeyang.utils.AjaxResult;
import com.codeyang.utils.Md5CodeGenUtil;
import com.codeyang.utils.ShiroSecurityUtils;
import com.codeyang.vo.DataGridView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;

// 取值 {实体变量名}

@RestController
@RequestMapping("/system/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 分页查询
     *
     * @return
     */
    @GetMapping("/listUserForPage")
    public AjaxResult listForPage(UserDto userDto) {
        DataGridView dataGridView = userService.lisPage(userDto);
        return AjaxResult.success("数据加载成功", dataGridView.getData(), dataGridView.getTotal());
    }


    /**
     * 新增数据
     *
     * @param userDto 新增数据
     * @return 是否新增成功
     */
    @PostMapping("/addUser")
    public AjaxResult addUser(@Validated UserDto userDto) {
        userDto.setSimpleUser(ShiroSecurityUtils.getCurrentSimpleUser());
        // 新增之前的用户密码
        // 1 设置默认密码123456 后台管理这个多一些
        // 2 截取某种证件的后面6位 大学管理系统多一些
        // 新增之前的用户的密码：
        // 1 设置默认的密码 123456 （后台管理系统）
        // 2 截取某种证件号的后面6 位 （ID,phone）（大学管理系统）
        userDto.setSalt(Md5CodeGenUtil.getSalt());
        userDto.setPassword(Md5CodeGenUtil.getDefaultPassword(userDto.getSalt()));
        boolean isSaveOk = userService.saveUser(userDto);
        return isSaveOk ? AjaxResult.success() : AjaxResult.fail("新增失败");
    }

    /**
     * 修改
     *
     * @param userDto 要修改的数据
     * @return 是否修改成功
     */
    @PutMapping("/updateUser")
    public AjaxResult updateUser(@Validated UserDto userDto) {
        userDto.setSimpleUser(ShiroSecurityUtils.getCurrentSimpleUser());
        boolean flage = userService.updateUser(userDto);
        return flage ? AjaxResult.success() : AjaxResult.fail("修改失败");

    }

    /**
     * 删除数据
     *
     * @param ids 根据id删除数据
     * @return 是否删除成功
     */
    @DeleteMapping("/deleteUserByIds/{ids}")
    public AjaxResult deleteUserByIds(@PathVariable("ids") Long[] ids) {
        boolean flag = userService.removeByIds(Arrays.asList(ids));
        return flag ? AjaxResult.success() : AjaxResult.fail("删除失败");
    }

    /**
     * 根据id查询数据
     *
     * @param id 数据的id
     * @return 数据的实体
     */
    @GetMapping("/getOne/{id}")
    public AjaxResult getOne(@PathVariable("id") Long id) {
        return AjaxResult.success(userService.getById(id));
    }

    /**
     * 重置密码
     *
     * @param userId
     * @return
     */
    @PutMapping("/resetPwd/{userId}")
    public AjaxResult resetPwd(@PathVariable("userId") Long userId) {
        // 1 先校验用户
        User user = userService.getById(userId);
        if (user == null) {
            return AjaxResult.fail("用户不存在:" + userId);
        }
        // 2 重置密码
        //salt 没必要重置
        String salt = user.getSalt();
        String password = user.getPassword();
        user.setPassword(Md5CodeGenUtil.getDefaultPassword(salt));
        boolean isOk = userService.updateById(user);
        return isOk ? AjaxResult.success() : AjaxResult.fail("重置失败");
    }


}
